package main;

import java.awt.Dimension;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import org.xml.sax.SAXException;

/**
 * Dieses Programm dient zum umwandeln von .odt Dateien in XML Dateien im SimpleText Format (siehe SimpleText.dtd).<br>
 * Alternativ kann eine .odt Datei oder eine SimpleText XML Datei in einem Fenster angezeigt werden.<br><br>
 * 
 * Die Kommandozeilenparameter lauten -convert und -show. Beide erwarten als zweiten Parameter<br>
 * eine Dateiangabe welche dann entsprechend konvertiert oder angezeigt wird.<br><br>
 *
 * Konvertierte .odt Dateien werden als out.xml abgespeichert.
 *
 * @author Patrick Bauer
 */
public class SimpleTextMain {

    /**
     * Prueft die Kommandozeilenparameter und liefert entsprechende Fehlermeldungen.<br>
     * Gibt es keine Fehler, wird der Dateiname an entsprechende Funktionen zur Weiterverarbeitung uebergeben.
     *
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if(args.length > 0) {
            if(args[0].equals("-convert")) {
                if(args.length > 1) {
                    SimpleTextMain.convertFile(args);
                } else {
                    System.out.println("Bitte geben Sie die zu kovertierende Datei an.");
                }
            } else if (args[0].equals("-show")) {
                if(args.length > 1) {
                    SimpleTextMain.showFile(args);
                } else {
                    System.out.println("Bitte geben Sie die anzuzeigende Datei an.");
                }
            } else {
                System.out.println("Unbekannter Befehl. Erlaubt sind -convert und -show");
            }
        } else {
            System.out.println("Bitte geben Sie einen Befehl an. (-convert oder -show)");
        }
    }

    /**
     * Validiert und zeigt eine .odt oder eine .xml Datei im SimpleText Format mit einfachen Formatierungen in einem Fenster an.
     *
     * @param args die Kommandozeilenparameter
     */
    private static void showFile(String[] args) {
        SimpleTextParser stParser;
        SimpleTextPane textPane = new SimpleTextPane();
         
        int dotPos = args[1].lastIndexOf(".") + 1;
        String extension = args[1].substring(dotPos);
        
        try {
            if(extension.equals("odt")) {
                ODTParser parser = new ODTParser(args[1]);
                parser.parse();

                stParser = new SimpleTextParser();
                stParser.setContentHandler(new SimpleTextContentHandler(textPane));
                stParser.parse(parser.getString());
            } else {
                stParser = new SimpleTextParser(args[1]);
                stParser.setContentHandler(new SimpleTextContentHandler(textPane));
                stParser.parse();
            }
            
            JFrame window = new JFrame("SimpleText");
            
            JScrollPane scrollPane = new JScrollPane(textPane);            
            scrollPane.setPreferredSize(new Dimension(400, 400));            
            
            window.getContentPane().add(scrollPane);
            window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            window.pack();
            window.setVisible(true);            
            
        } catch (IOException ex) {
            System.out.println("Fehler beim Einlesen der Datei. Existiert die Datei?");
        } catch (SAXException ex) {
           System.out.println("Fehler beim Verarbeiten der Datei."); 
        } 
    }

    /**
     * Konvertiert eine .odt Datei in eine SimpleText .xml Datei.<br>
     * Speichert die XML Datei mit dem Dateinamen "out.xml".
     *
     * @param args die Kommandozeilenparameter
     */
    private static void convertFile(String[] args) {
        try {
            ODTParser parser = new ODTParser(args[1]);
            parser.parse();
            BufferedWriter out = new BufferedWriter(new FileWriter("out.xml"));
            out.write(parser.getString());
            out.close();
            System.out.println("Datei wurde erfolgreich konvertiert.");
        } catch (IOException ex) {
            System.out.println("Fehler beim Einlesen der Datei. Existiert die Datei?");
        } catch (SAXException ex) {
           System.out.println("Fehler beim Verarbeiten der Datei."); 
        }
    }
}
